/**
 * @file inOutCtrl.c
 * @brief   
 * @author  xiaowine (xiaowine@sina.cn)
 * @version 01.00
 * @date    2020-12-10
 * 
 * @copyright Copyright (c) {2020}  xiaowine
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version <th>Author  <th>Description
 * <tr><td>2020-12-10 <td>1.0     <td>wangh     <td>内容
 * </table>
 * ******************************************************************
 * *                   .::::
 * *                 .::::::::
 * *                ::::::::::
 * *             ..:::::::::::
 * *          '::::::::::::
 * *            .:::::::::
 * *       '::::::::::::::..        女神助攻,流量冲天
 * *            ..::::::::::::.     永不宕机,代码无bug
 * *          ``:::::::::::::::
 * *           ::::``:::::::::'        .:::
 * *          ::::'   ':::::'       .::::::::
 * *        .::::'      ::::     .:::::::'::::
 * *       .:::'       :::::  .:::::::::' ':::::
 * *      .::'        :::::.:::::::::'      ':::::
 * *     .::'         ::::::::::::::'         ``::::
 * * ...:::           ::::::::::::'              ``::
 * *```` ':.          ':::::::::'                  ::::.
 * *                   '.:::::'                    ':'````.
 * ******************************************************************
 */

#include "inOutCtrl.h"
#include "opration.h"

void inOutCtrlInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

    /* 第1步：打开GPIO时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);

    /* 第2步：配置所有的按键GPIO为浮动输入模式(实际上CPU复位后就是输入状态) */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /* 输入浮空模式 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_Init(GPIOF, &GPIO_InitStructure);

    /* 第2步：配置所有的按键GPIO为浮动输入模式(实际上CPU复位后就是输入状态) */
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /* 推挽输出 */

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_10;
    GPIO_Init(GPIOD, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_8 | GPIO_Pin_10 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
    GPIO_Init(GPIOE, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
    GPIO_Init(GPIOF, &GPIO_InitStructure);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
    GPIO_Init(GPIOG, &GPIO_InitStructure);
}

void inOutCtrl(void)
{
    u8 SL_flag = 0;

    if (emergencyStatus) //急停
    {
        memset(ctrlBuff, 0, 5);
    }
    else
    {
    }

    if (remoteStatus)
    {
    }
    else
    {
    }

    if (engineStart) //发动机启动
    {
    }
    else
    {
    }

    if (engineStall) //发动机熄火
    {
    }
    else
    {
    }

    if (boomLeftWhirl) //吊臂左旋
    {
        PAout(9) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PAout(9) = outPutOff;
    }
    if (boomRightWhirl) //吊臂右旋
    {
        PAout(8) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PAout(8) = outPutOff;
    }
    if (boomUp) //吊臂上升
    {
        PCout(9) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PCout(9) = outPutOff;
    }
    if (boomDown) //吊臂下降
    {
        PCout(8) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PCout(8) = outPutOff;
    }
    if (trestleUp) //支架上升
    {
        PGout(8) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PGout(8) = outPutOff;
    }
    if (trestleDown) //支架下降
    {
        PGout(7) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PGout(7) = outPutOff;
    }
    if (trestleStretch) //支架伸出
    {
        PGout(5) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PGout(5) = outPutOff;
    }
    if (trestleShrink) //支架缩回
    {
        PGout(4) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PGout(4) = outPutOff;
    }
    if (trestleLeftWhirl) //支架左旋
    {
        PGout(3) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PGout(3) = outPutOff;
    }
    if (trestleRightWhirl) //支架右旋
    {
        PGout(2) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PGout(2) = outPutOff;
    }

    /****output 1**********/
    /*     伸联动             放泥        挖泥*/
    if (stretchLinkage || mudUnleash || mudDig)
    {
        SL_flag = 1;
        PEout(0) = outPutOn;
    }
    else
    {
        PEout(0) = outPutOff;
    }
    /****output 2**********/
    /*     收绳          缩联动           下卷盘离合    */
    if (ropeRollUp || shrinkLinkage || underBobbinClutch)
    {
        SL_flag = 1;
        PBout(9) = outPutOn;
    }
    else
    {
        PBout(9) = outPutOff;
    }
    /****output 3**********/
    /*     收绳           缩联动        */
    if (ropeRollUp || shrinkLinkage)
    {
        SL_flag = 1;
        PBout(8) = outPutOn;
    }
    else
    {
        PBout(8) = outPutOff;
    }
    /****output 4**********/
    /*     放绳    */
    if (ropeRelease)
    {
        SL_flag = 1;
        PBout(5) = outPutOn;
    }
    else
    {
        PBout(5) = outPutOff;
    }

    /****output 5**********/
    /*     放泥         挖泥      下卷盘收绳*/
    //   if (mudUnleash || mudDig || underBobbinShrink)
    if (mudDig || underBobbinShrink)
    {
        SL_flag = 1;
        PGout(15) = outPutOn;
    }
    else
    {
        PGout(15) = outPutOff;
    }

    /****output 6**********/
    /*     下卷盘收 */
    //    if (underBobbinShrink)
    //    {
    //        SL_flag = 1;
    //        PGout(14) = outPutOn;
    //    }
    //    else
    //    {
    PGout(14) = outPutOff;
    //    }
    /****output 7**********/
    /*     伸联动 */
    if (stretchLinkage)
    {
        SL_flag = 1;
        PGout(13) = outPutOn;
    }
    else
    {
        PGout(13) = outPutOff;
    }
    /****output 8**********/
    /*     缩联动 */
    if (shrinkLinkage)
    {
        SL_flag = 1;
        PGout(12) = outPutOn;
    }
    else
    {
        PGout(12) = outPutOff;
    }

    // if (stretchLinkage) //伸联动
    // {
    // }
    // else
    // {
    // }
    // if (shrinkLinkage) //缩联动
    // {
    // }
    // else
    // {
    // }
    // if (mudUnleash) //放泥
    // {
    // }
    // else
    // {
    // }
    // if (mudDig) //挖泥
    // {
    // }
    // else
    // {
    // }
    // if (ropeRelease) //放绳
    // {
    // }
    // else
    // {
    // }
    // if (ropeRollUp) //收绳
    // {
    // }
    // else
    // {
    // }

    if (diggerUnlock) //挖掏器开
    {
        PBout(14) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PBout(14) = outPutOff;
    }
    if (diggerLock) //挖掏器锁
    {
        PBout(13) = outPutOn;
        SL_flag = 1;
    }
    else
    {
        PBout(13) = outPutOff;
    }
    //    if (underBobbinClutch) //下卷盘离合
    //    {
    //        SL_flag = 1;
    //        PBout(9) = outPutOn;
    //    }
    //    else
    //    {
    //        PBout(9) = outPutOff;
    //    }
    //    if (underBobbinShrink) //下卷盘离收
    //    {
    //        SL_flag = 1;
    //        PGout(14) = outPutOn;
    //    }
    //    else
    //    {
    //        PGout(14) = outPutOff;
    //    }
    if (bobbinFoword) //卷盘收
    {
        SL_flag = 1;
        PAout(11) = outPutOn;
    }
    else
    {
        PAout(11) = outPutOff;
    }
    if (bobbinReversion) //卷盘放
    {
        SL_flag = 1;
        PAout(10) = outPutOn;
    }
    else
    {
        PAout(10) = outPutOff;
    }
    if ((highPressureOpen) || (airbrushOpen) || (Gyakaitim > 200)) //高压开，疏通的时候延时开
    {
        PEout(12) = outPutOn;
    }
    else
    {
        PEout(12) = outPutOff;
    }
    if (highPressureClose) //高压关，这路没有接线
    {
        PEout(10) = outPutOn;
    }
    else
    {
        PEout(10) = outPutOff;
    }
    if (airbrushOpen) //喷枪开
    {
        PEout(14) = outPutOn;
    }
    else
    {
        PEout(14) = outPutOff;
    }
    if (airbrushClose) //喷枪关，这路没有接线
    {
        PEout(13) = outPutOn;
    }
    else
    {
        PEout(13) = outPutOff;
    }
    //    if (dredgeOpen) //疏通开
    //    {
    //			  PDout(10) = outPutOn;
    //    }
    //    else
    //    {
    PDout(10) = outPutOff;
    //    }
    //    if (dredgeClose) //疏通关
    //    {
    //		  	PBout(15) = outPutOn;
    //    }
    //    else
    //    {
    PBout(15) = outPutOff;
    //    }

    if (dredgeOpen) //疏通开
    {
        PEout(8) = outPutOn;
    }
    else
    {
        if (Stongguan > 200)
            PEout(8) = outPutOff; //延时关闭
    }
    if (dredgeClose) //疏通关,这路没有接线
    {
        PFout(14) = outPutOn;
    }
    else
    {
        PFout(14) = outPutOff;
    }

    //    if (reserve1) //备用1
    //    {
    //        PEout(8) = outPutOn;
    //    }
    //    else
    //    {
    //        PEout(8) = outPutOff;
    //    }
    //    if (reserve2) //备用2
    //    {
    //        PFout(14) = outPutOn;
    //    }
    //    else
    //    {
    //        PFout(14) = outPutOff;
    //    }

    if (SL_flag)
    {
        PFout(12) = outPutOn;
        PFout(13) = outPutOn;
    }
    else
    {
        PFout(12) = outPutOff;
        PFout(13) = outPutOff;
    }

    if (PCin(14) == 0)
    {
        PAout(4) = outPutOn;
    }
    else
    {
        PAout(4) = outPutOff;
    }
}
